import request from "@/utils/request"
import {getLocalStorage} from "../../utils/auth.js";

/**
 *@params：
 *@desc：用户电台
 * 说明 : 调用此接口, 传入用户 id 可获取用户创建的电台
 *
 * 必选参数 : uid: 用户 id
 *
 * 接口地址 : /user/audio
 *
 * 调用例子 : /user/audio?uid=32953014
 *@author：羽
 *@date 2022/08/20 08:38:15
 */
export const getUserAudio = (uid) => {
  return request({
    method: 'get',
    url: '/user/audio',
    params: {
      uid,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：推荐电台
 * 说明 : 调用此接口 , 可获取推荐电台
 *
 * 接口地址 : /personalized/djprogram
 *
 * 调用例子 : /personalized/djprogram
 *@author： 羽
 *@date： 2022/09/06 15:37:36
 */

export const getPersonalizedDjprogram = () => {
  return request({
    method: 'get',
    url: '/personalized/djprogram',
    params: {
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：推荐节目
 * 说明 : 调用此接口 , 可获取推荐电台
 *
 * 接口地址 : /program/recommend
 *
 * 调用例子 : /program/recommend
 *@author： 羽
 *@date： 2022/09/06 15:38:35
 */

export const getProgramRecommend = () => {
  return request({
    method: 'get',
    url: '/program/recommend',
    params: {
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 分类
 * 说明 : 登录后调用此接口 , 可获得电台类型
 *
 * 接口地址 : /dj/catelist
 *
 * 调用例子 : /dj/catelist
 *@author： 羽
 *@date： 2022/09/06 15:43:49
 */
// 取这两个作为电台类型icon
// pic84x84IdUrl: "http://p4.music.126.net/7Qm5KCFbxCKKhaoQP__5EQ==/109951165404092535.jpg"
// pic96x96Url: "http://p3.music.126.net/ZcHIE0jRkdJpng82oW5YFA==/109951165404086270.jpg"
export const getDjCatelist = () => {
  return request({
    method: 'get',
    url: '/dj/catelist',
    params: {
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 节目榜
 * 说明 : 登录后调用此接口 , 可获得电台节目榜
 *
 * 可选参数 :
 *
 * limit : 返回数量 , 默认为 100
 *
 * offset : 偏移数量，用于分页 , 如 :( 页数 -1)*100, 其中 100 为 limit 的值 , 默认为 0
 *
 * 接口地址 : /dj/program/toplist
 *
 * 调用例子 : /dj/program/toplist?limit=1
 *@author： 羽
 *@date： 2022/09/06 16:41:07
 */

// params无效
export const getDjProgramToplist = (params) => {
  return request({
    method: 'get',
    url: '/dj/program/toplist',
    params: {
      ...params,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 节目详情
 * 说明 : 调用此接口传入电台节目 id,可获得电台节目详情
 *
 * 必选参数 : id: 电台节目 的 id
 *
 * 接口地址 : /dj/program/detail
 *
 * 调用例子 : /dj/program/detail?id=1367665101
 *@author： 羽
 *@date： 2022/09/07 10:28:55
 */
export const getProgramDetail = (id) => {
  return request({
    method: 'get',
    url: '/dj/program/detail',
    params: {
      id: id,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 分类推荐
 * 说明 : 登录后调用此接口 , 传入分类,可获得对应类型电台列表
 *
 * 必选参数 : type: 电台类型 , 数字 , 可通过/dj/catelist获取 , 对应关系为 id 对应 此接口的 type, name 对应类型
 *
 * 接口地址 : /dj/recommend/type
 *
 * 调用例子 : /dj/recommend/type?type=1(明星做主播) /dj/recommend/type?type=2001 (创作|翻唱)
 *@author： 羽
 *@date： 2022/09/09 08:10:29
 */

export const getDjRecommendType = (type) => {
  return request({
    method: 'get',
    url: '/dj/recommend/type',
    params: {
      type,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 详情
 * 说明 : 登录后调用此接口 , 传入rid, 可获得对应电台的详情介绍
 *
 * 必选参数 : rid: 电台 的 id
 *
 * 接口地址 : /dj/detail
 *
 * 调用例子 : /dj/detail?rid=336355127 ( 对应 ' 代码时间 ' 的详情介绍 )
 *@author： 羽
 *@date： 2022/09/11 17:30:15
 */

export const getDjDetail = (rid) => {
  return request({
    method: 'get',
    url: '/dj/detail',
    params: {
      rid,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 订阅
 * 说明 : 登录后调用此接口 , 传入rid, 可订阅 dj,dj 的 rid 可通过搜索指定 type='1009' 获取其 id, 如/search?keywords= 代码时间 &type=1009
 *
 * 必选参数 : rid: 电台 的 id
 *
 * 接口地址 : /dj/sub
 *
 * 调用例子 : /dj/sub?rid=336355127&t=1 ( 对应关注 ' 代码时间 ') /dj/sub?rid=336355127&t=0 ( 对应取消关注 ' 代码时间 ')
 *@author： 羽
 *@date： 2022/09/12 19:09:43
 */

export const getDjSub = ({rid, t}) => {
  return request({
    method: 'get',
    url: '/dj/sub',
    params: {
      rid,
      t,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 节目
 * 说明 : 登录后调用此接口 , 传入rid, 可查看对应电台的电台节目以及对应的 id, 需要 注意的是这个接口返回的 mp3Url 已经无效 , 都为 null, 但是通过调用 /song/url 这 个接口 , 传入节目 id 仍然能获取到节目音频 , 如 /song/url?id=478446370 获取代 码时间的一个节目的音频
 *
 * 必选参数 : rid: 电台 的 id
 *
 * 可选参数 :
 *
 * limit : 返回数量 , 默认为 30
 *
 * offset : 偏移数量，用于分页 , 如 :( 页数 -1)*30, 其中 30 为 limit 的值 , 默认为 0
 *
 * asc : 排序方式,默认为 false (新 => 老 ) 设置 true 可改为 老 => 新
 *
 * 接口地址 : /dj/program
 *
 * 调用例子 : /dj/program?rid=336355127&limit=40 ( 对应 ' 代码时间 ' 的节目列表 )
 *@author： 羽
 *@date： 2022/09/12 19:51:23
 */

export const getDjProgram = ({rid, limit = 40, offset = 0, asc = false}) => {
  return request({
    method: 'get',
    url: '/dj/program',
    params: {
      rid,
      limit,
      offset,
      asc,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台个性推荐
 * 说明 : 调用此接口,可获取电台个性推荐列表 可选参数 :
 *
 * limit : 返回数量,默认为 6,总条数最多 6 条
 *
 * 接口地址 : /dj/personalize/recommend
 *
 * 调用例子 : /dj/personalize/recommend?limit=5
 *@author： 羽
 *@date： 2022/09/15 14:06:26
 */

export const getDjPersonalizeRecommend = (limit = 5) => {
  return request({
    method: 'get',
    url: '/dj/personalize/recommend',
    params: {
      limit,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台 - 类别热门电台
 * 可选参数 :
 *
 * limit : 返回数量 , 默认为 30
 *
 * offset : 偏移数量，用于分页 , 如 :( 页数 -1)*30, 其中 30 为 limit 的值 , 默认为 0
 *
 * cateId: 类别 id,可通过 /dj/category/recommend 接口获取
 *
 * 接口地址 : /dj/radio/hot
 *
 * 调用例子 : /dj/radio/hot?cateId=2001(创作|翻唱) /dj/radio/hot?cateId=10002 (3D|电子)
 *@author： 羽
 *@date： 2022/09/19 16:04:07
 */

export const getDjRadioHot = ({limit = 30, offset = 0, cateId = null }) => {
  return request({
    method: 'get',
    url: '/dj/radio/hot',
    params: {
      limit,
      offset,
      cateId,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：资源点赞( MV,电台,视频)
 * 说明 : 调用此接口 , 可对 MV,电台,视频点赞
 *
 * 必选参数 :
 *
 * type:资源类型,对应以下类型
 *
 * 1: mv
 *
 * 4: 电台
 *
 * 5: 视频
 *
 * 6: 动态
 * t: 操作,1 为点赞,其他为取消点赞
 *
 * id: 资源 id
 *
 * 接口地址 : /resource/like
 *
 * 调用例子 : /resource/like?t=1&type=1&id=5436712
 *
 * 注意：如给动态点赞，不需要传入 id，需要传入 threadId,可通过 event,/user/event 接口获取，如： /resource/like?t=1&type=6&threadId=A_EV_2_6559519868_32953014
 *@author： 羽
 *@date： 2022/09/25 09:03:36
 */

export const getResourceLike = (params) => {
  return request({
    method: 'get',
    url: '/resource/like',
    params: {
      ...params,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：获取用户动态
 * 说明 : 登录后调用此接口 , 传入用户 id, 可以获取用户动态
 *
 * 必选参数 : uid : 用户 id
 *
 * 可选参数 : limit : 返回数量 , 默认为 30
 *
 * lasttime : 返回数据的 lasttime ,默认-1,传入上一次返回结果的 lasttime,将会返回下一页的数据
 *
 * 接口地址 : /user/event
 *
 * 调用例子 : /user/event?uid=32953014 /user/event?uid=32953014&limit=1&lasttime=1558011138743
 *
 * 返回结果的type参数对应:
 *
 * 18 分享单曲
 * 19 分享专辑
 * 17、28 分享电台节目
 * 22 转发
 * 39 发布视频
 * 35、13 分享歌单
 * 24 分享专栏文章
 * 41、21 分享视频
 *@author： 羽
 *@date： 2022/11/07 19:19:43
 */
export const getUserEvent = (params) => {
  return request({
    url: '/user/event',
    params: {
      ...params,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：电台的订阅列表
 * 说明 : 登录后调用此接口 , 可获取订阅的电台列表
 *
 * 接口地址 : /dj/sublist
 *
 * 调用例子 : /dj/sublist
 *@author： 羽
 *@date： 2022/12/09 14:11:09
 */
export const getDjSublist = () => {
  return request({
    url: '/dj/sublist',
    params: {
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：删除歌单
 * 说明 : 调用此接口 , 传入歌单 id 可删除歌单
 *
 * 必选参数 : id : 歌单 id,可多个,用逗号隔开
 *
 * 接口地址 : /playlist/delete
 *
 * 调用例子 : /playlist/delete?id=2947311456 , /playlist/delete?id=5013464397,5013427772
 *@author： 羽
 *@date： 2022/12/21 16:25:24
 */
export const getPlaylistDelete = (id) => {
  return request({
    url: '/playlist/delete',
    params: {
      id,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：更新歌单描述
 * 说明 : 登录后调用此接口,可以单独更新用户歌单描述
 *
 * 必选参数 :
 *
 * id:歌单id
 *
 * desc:歌单描述
 * 接口地址 : /playlist/desc/update
 *
 * 调用例子 : /playlist/desc/update?id=24381616&desc=描述
 *@author： 羽
 *@date： 2022/12/22 16:04:11
 */
export const getPlaylistDescUpdate = (params) => {
  return request({
    url: '/playlist/desc/update',
    params: {
      ...params,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：更新歌单名
 * 说明 : 登录后调用此接口,可以单独更新用户歌单名
 *
 * 必选参数 :
 *
 * id: 歌单id
 *
 * name: 歌单名
 * 接口地址 : /playlist/name/update
 *
 * 调用例子 : /playlist/name/update?id=24381616&name=歌单名
 *@author： 羽
 *@date： 2022/12/22 16:06:43
 */

export const getPlaylistNameUpdate = (params) => {
  return request({
    url: '/playlist/name/update',
    params: {
      ...params,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：更新歌单标签
 * 说明 : 登录后调用此接口,可以单独更新用户歌单标签
 *
 * 必选参数 :
 *
 * id: 歌单id
 *
 * tags: 歌单标签
 * 接口地址 : /playlist/tags/update
 *
 * 调用例子 : /playlist/tags/update?id=24381616&tags=学习
 *@author： 羽
 *@date： 2022/12/22 16:09:28
 */

export const getPlaylistTagsUpdate = (params) => {
  return request({
    url: '/playlist/tags/update',
    params: {
      ...params,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：更新歌单 -》 可以替代上面三个接口
 * 说明 : 登录后调用此接口,可以更新用户歌单
 *
 * 必选参数 :
 *
 * id:歌单id
 *
 * name:歌单名字
 *
 * desc:歌单描述
 *
 * tags:歌单tag ,多个用 `;` 隔开,只能用官方规定标签
 * 接口地址 : /playlist/update
 *
 * 调用例子 : /playlist/update?id=24381616&name=新歌单&desc=描述&tags=欧美
 *@author： 羽
 *@date： 2022/12/22 16:49:26
 */

export const getPlaylistUpdate = (params) => {
  return request({
    url: '/playlist/update',
    params: {
      ...params,
      timestamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：歌单封面上传
 * 说明 : 登录后调用此接口,使用'Content-Type': 'multipart/form-data'上传图片 formData(name 为'imgFile'),可更新歌单封面(参考:https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/public/playlist_cover_update.html)
 *
 * 必选参数 :
 * id: 歌单 id 3143833470
 *
 * 可选参数 :
 *
 * imgSize : 图片尺寸,默认为 300
 *
 * imgX : 水平裁剪偏移,方形图片可不传,默认为 0 imgY : 垂直裁剪偏移,方形图片可不传,默认为 0
 *
 * 接口地址 : /playlist/cover/update
 *
 * 调用例子 : /playlist/cover/update?id=3143833470&imgSize=200
 *@author： 羽
 *@date： 2022/12/22 16:26:31
 */

export const getPlaylistCoverUpdate = (data, params) => {
  return request({
    url: '/playlist/cover/update',
    method: 'POST',
    headers: {
      'Content-Type': 'multipart/form-data',
    },
    params: {
      ...params,
      cookie: getLocalStorage('cookies'),
      timestamp: Date.now(),//传入参数时间戳
    },
    data
  })
}

/**
 *@params：
 *@desc：获取动态消息
 * 说明 : 调用此接口 , 可获取各种动态 , 对应网页版网易云，朋友界面里的各种动态消息 ，如分享的视频，音乐，照片等！
 *
 * 必选参数 : pagesize : 每页数据,默认 20
 *
 * lasttime : 返回数据的 lasttime ,默认-1,传入上一次返回结果的 lasttime,将会返回下一页的数据
 *
 * 接口地址 : /event
 *
 * 调用例子 : /event?pagesize=30&lasttime=1556740526369
 *@author： 羽
 *@date： 2022/12/28 14:28:41
 */

export const getEvent = (params) => {
  return request({
    url: '/event',
    method: 'GET',
    params: {
      ...params,
      timestamp: Date.now(),//传入参数时间戳
    }
  })
}